import $mUtils from './utils.js';
import {checkLogin} from '../utils/utils.js'
import router from './routerConfig.js'
/* 
 * 路由对象
 * 中心思想：需要路由鉴权,由于uni-app没有vue中的全局钩子函数，所以封装了Router对象。
 * 说明：应用中的路由跳转尽量使用该Router的方法，并配合config中的路由表对象进行跳转。
 * 
 * 示例：this.$mRouter.reLaunch({route:this.$mRoutesConfig.coupon,query:{a:1}})
 * 
 */
class Router {
	constructor(arg) {
		this.callBack = () => {};
	}

	beforeEach(callBack) {
		if (callBack instanceof Function) this.callBack = callBack;
	}

	navigateTo(to) {
		// if(!checkLogin(to)){
		// 	this.callBack("navigateTo",{
		// 		route:router.content.login
		// 	})
		// 	throw new Error("主动抛出异常，阻止继续执行")
		// }
		this.callBack("navigateTo", to);
	}

	redirectTo(to) {
		this.callBack("redirectTo", to);
	}

	reLaunch(to) {
		this.callBack("reLaunch", to);
	}

	switchTab(to) {
		this.callBack("switchTab", to);
	}

	navigateBack(delta) {
		uni.navigateBack({
			delta
		})
	}
}

let $mRouter = new Router();

$mRouter.beforeEach((navType, to) => {
	if (to.route === undefined) throw ("路由钩子函数中没有找到to.route对象，路由信息:" + JSON.stringify(to));
	uni[navType]({
		url: $mUtils.objParseUrlAndParam(to.route.path, to.query)
	})
	
	console.log(to)
})
export default $mRouter